package com.dhee.creditcardsystem.util;




import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class DBUtilAppChange {

    /**
     * 使用反射将源对象的非空属性合并到目标对象中
     * @param source 源对象（新页面的数据）
     * @param target 目标对象（已存在的数据）
     */
    public static void mergeData(Object source, Object target) {
        Class<?> sourceClass = source.getClass();
        Class<?> targetClass = target.getClass();

        // 确保是同一类型对象
        if (!sourceClass.equals(targetClass)) {
            throw new IllegalArgumentException("源对象和目标对象必须是同一类型");
        }

        Field[] fields = sourceClass.getDeclaredFields();

        for (Field field : fields) {
            try {
                field.setAccessible(true);
                Object sourceValue = field.get(source);

                // 只有当源对象的字段不为空时才更新目标对象
                if (sourceValue != null && !isEmpty(sourceValue)) {
                    field.set(target, sourceValue);
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 检查对象是否为空
     */
    private static boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        }
        if (obj instanceof String) {
            return ((String) obj).trim().isEmpty();
        }
        return false;
    }

    /**
     * 使用反射获取对象的所有字段和值
     */
    public static Map<String, Object> getObjectFields(Object obj) {
        Map<String, Object> fieldMap = new HashMap<>();
        Class<?> clazz = obj.getClass();

        Field[] fields = clazz.getDeclaredFields();

        for (Field field : fields) {
            try {
                field.setAccessible(true);
                Object value = field.get(obj);
                fieldMap.put(field.getName(), value);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        return fieldMap;
    }
}
